package code1.stack_and_queue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 原题链接：https://leetcode.cn/problems/implement-stack-using-queues/
 */
public class P225 {

    //使用队列模拟栈
    class MyStack {

        Queue<Integer> queue1;
        Queue<Integer> queue2;

        public MyStack() {
            queue1=new LinkedList<>();
            queue2=new LinkedList<>();
        }

        public void push(int x) {
            //令队1一直为空,每次都先往队1中添加元素
            queue1.offer(x);
            //将队2中元素全部转移到队1中
            while (!queue2.isEmpty()){
                queue1.offer(queue2.poll());
            }
            //交换两队列,保证队1一直为空
            Queue<Integer> tmp=queue1;
            queue1=queue2;
            queue2=tmp;
        }

        public int pop() {
            return queue2.poll();
        }

        public int top() {
            return queue2.peek();       //peek返回队头元素
        }

        public boolean empty() {
            return queue2.isEmpty();
        }
    }
}
